#ifndef __WED_MEM_H__
#define __WED_MEM_H__
#include <stdio.h>
#include <stdint.h>

/**
 * \brief 内存初始化
 *
 * @return 成功返回 0
 */
int Wed_mem_init(void);
/**
 * \brief 内存分配函数
 *
 * @param size 要分配内存的大小
 *
 * @return 成功返回分配的内存地址
 */
void *Wed_malloc(uint32_t size);
/**
 * \brief 内存释放函数
 *
 * @param p_mem 要释放的内存的地址
 */
void Wed_free(void *p_mem);
/**
 * \brief 指定数量和大小的内存块，并将分配的内存初始化为零
 *
 * @param n_mems 要分配内存块的数量
 * @param size   要分配内存块的大小
 *
 * @return 成功返回分配的内存地址
 */
void *Wed_calloc(uint32_t n_mems, uint32_t size);
/**
 * \brief 重新分配内存
 *
 * @param p_mem    旧的内存地址
 * @param new_size 分配的新的内存的大小
 *
 * \retval 成功返回新分配的内存地址
 */
void *Wed_realloc(void *p_mem, uint32_t new_size);
/**
 * \brief DMA 内存初始化
 *
 * @return 成功返回 0
 */
int Wed_mem_dma_init(void *p_start_addr, uint32_t size);
/**
 * \brief DMA 内存分配
 *
 * @param size  要分配的内存大小
 * @param align 内存起始地址对齐数
 *
 * @return 成功返回分配的内存地址
 */
void *Wed_mem_dma_align_alloc(uint32_t size, uint32_t align);
/**
 * \brief DMA 内存释放
 *
 * @param p_mem 要释放的内存地址
 */
void Wed_mem_dma_align_free(void *p_mem);
#endif
